package com.jy.rhin.domain.registration.entity;

import lombok.Getter;
import org.apache.commons.lang3.StringUtils;

/**
 * 代码类型枚举
 *
 * @author MaYuXuan
 */
@Getter
public enum CodeEnum {
    /**
     * 系统代码
     */
    CODE_SYSTEM("CV02.05.101", "系统代码", ""),
    /**
     * 事件活动代码
     */
    EVENT_ACTION_CODE("CV02.05.102", "事件活动代码", "CV_EventActionCode"),
    /**
     * 事件结果代码
     */
    EVENT_OUTCOME_INDICATOR("CV02.05.103", "事件结果代码", "CV_EventOutcomeIndicator"),
    /**
     * 事件类型代码
     */
    EVENT_TYPE_CODE("CV02.05.104", "事件类型代码", "CV_EventTypeCode"),
    /**
     * 审计源类型代码
     */
    AUDIT_SOURCE_TYPE_CODE("CV02.05.105", "审计源类型代码", "CV_AuditSourceTypeCode"),
    /**
     * 网络访问点类型代码
     */
    NETWORK_ACCESS_POINT_TYPE_CODE("CV02.05.106", "网络访问点类型代码", "CV_NetworkAccessPointTypeCode"),
    /**
     * 参与者角色代码
     */
    ROLE_ID_CODE("CV02.05.107", "参与者角色代码", "CV_RoleIDCode"),
    /**
     * 参与者具体对象类型代码
     */
    PARTICIPANT_OBJECT_TYPE_CODE("CV02.05.108", "参与者具体对象类型代码", "CV_ParticipantObjectTypeCode"),
    /**
     * 参与者具体对象角色类型代码
     */
    PARTICIPANT_OBJECT_TYPE_CODE_ROLE("CV02.05.109", "参与者具体对象角色类型代码", "CV_ParticipantObjectTypeCodeRole"),
    /**
     * 参与者具体对象生命周期代码
     */
    PARTICIPANT_OBJECT_DATA_LIFE_CYCLE("CV02.05.110", "参与者具体对象生命周期代码", "CV_ParticipantObjectDataLifeCycle"),
    /**
     * 参与者具体对象标识类型代码
     */
    PARTICIPANT_OBJECT_ID_TYPE_CODE("CV02.05.111", "参与者具体对象标识类型代码", "CV_ParticipantObjectIDTypeCode"),
    /**
     * 服务提供者代码
     */
    SERVICE_CODE("CV02.05.113", "服务提供者代码", "CV_EventIDCode"),
    /**
     * 文档的细粒度分类
     */
    TITLE("SD01.01.002.00", "文档的细粒度分类", "SD_Title"),
    /**
     * 文档的粗粒度分类
     */
    CONTENT_TYPE_CODE("SD01.01.003.00", "文档的粗粒度分类", "SD_ContentTypeCode"),
    /**
     * 语言代码表
     */
    LANGUAGE_CODE("SD01.01.004.00", "语言代码表", "SD_LanguageCode"),
    /**
     * 访问权限代码表
     */
    CONFIDENTIALITY_CODE("SD01.01.005.00", "访问权限代码表", "SD_ConfidentialityCode"),
    /**
     * MIME格式代码表
     */
    MIME_TYPE("SD01.01.006.00", "MIME格式代码表", "SD_MimeType"),
    /**
     * 文件格式代码表
     */
    FORMAT_CODE("SD01.01.007.00", "文件格式代码表", "SD_FormatCode"),
    /**
     * 对象状态代码
     */
    OBJECT_STATUS("SD01.01.008.00", "对象状态代码", "CV_ObjectStatus"),
    /**
     * 文档关联状态代码
     */
    ASSOCIATION_STATUS("SD01.01.009.00", "文档关联状态代码", "CV_AssociationStatus"),
    /**
     * 文档关联类型代码
     */
    ASSOCIATION_TYPE("SD01.01.010.00", "文档关联类型代码", "CV_AssociationType"),
    /**
     * 文档元数据的对象类型代码表
     */
    OBJECT_TYPE("SD01.01.011.00", "文档元数据的对象类型代码表", "CV_ObjectType"),
    /**
     * 机构分类管理类别代码
     */
    PRACTICE_SETTING_CODE("CVX_JGFLGLLB", "机构分类管理类别代码", "CF_PracticeSettingCode"),
    /**
     * 经济类型分类与代码
     */
    HEALTHCARE_FACILITY_TYPE_CODE("GB/T 12402", "经济类型分类与代码", "CF_HealthcareFacilityTypeCode"),
    ;

    /**
     * 值域标识符
     */
    private final String id;
    /**
     * 描述
     */
    private final String desc;
    /**
     * 系统代码
     */
    private final String codeSystem;

    CodeEnum(String id, String desc, String codeSystem) {
        this.id = id;
        this.desc = desc;
        this.codeSystem = codeSystem;
    }

    public static CodeEnum lookup(String codeSystem) {
        for (CodeEnum value : values()) {
            if (StringUtils.equals(codeSystem, value.codeSystem)) {
                return value;
            }
        }
        return null;
    }

}
